La “Configuración del Wallet” en Sequence Wallets define el control de acceso, los firmantes y el peso de las firmas.
threshold
- La “suma de pesos” requerida para que una firma sea considerada válida.checkpoint
- Utilizado como salt y mecanismo de orden para las actualizaciones del wallet.tree
- Determina los firmantes y sus pesos para el wallet.threshold
es un uint16
; puede tener cualquier valor entre 0 y 65535. Las firmas solo se consideran válidas o inválidas si la suma de los pesos de los firmantes que firmaron la transacción es mayor o igual al threshold.
checkpoint
es un uint32
. Durante la creación del wallet, se puede proporcionar un valor semi-aleatorio para generar wallets independientes con la misma configuración inicial. Luego, durante la operación normal, el checkpoint
es utilizado por Light State Sync para asegurar que las actualizaciones del wallet se apliquen en el orden correcto.
tree
es un árbol de Merkle binario no balanceado, donde cada hoja puede contener un firmante, una firma estática o un subárbol. El árbol puede representar cualquier combinación de firmantes y pesos, y puede usarse para crear wallets multifirma complejos.
Los posibles tipos de hoja son:
address
) y un peso (uint8
). El peso indica cuánto contribuye el firmante al umbral.
La dirección puede pertenecer a un contrato compatible con ERC1271
o a un wallet EOA.
El hash de la hoja se calcula de la siguiente manera:
Infinity
.
Tenga en cuenta que los subdigests estáticos que existen dentro de árboles anidados tendrán su peso “Infinity” reducido al peso del árbol anidado.
El hash de la hoja se calcula de la siguiente manera:
weight
externo (uint8
)threshold
interno (uint16
)tree
internointernal threshold
dentro del subárbol, se considera válida y el external weight
se suma al árbol principal. Se pueden crear cualquier cantidad de configuraciones anidadas y es posible crear múltiples niveles de anidamiento.
Este patrón puede usarse, entre otras cosas, para expresar los siguientes escenarios:
threshold == 0
o threshold > total weight
resultarán en wallets completamente no autenticadas o wallets inaccesibles, respectivamente.configuration
nunca se almacena como un todo; en su lugar, el árbol de Merkle se hashea en un solo valor bytes32
, esto se denomina internamente el imageHash
de la configuración.
El imageHash
se calcula de la siguiente manera:
hashTree
es una función recursiva que hashea el árbol en un solo valor bytes32
. El pseudocódigo para la función hashTree
es el siguiente:
imageHash
de la configuración inicial como el SALT durante el despliegue CREATE2
del wallet.
Las wallets se despliegan llamando a la función deploy
del contrato Factory
, que recibe los siguientes parámetros:
mainModule
: La dirección de la implementación inicial del código del wallet.salt
: El imageHash
de la configuración inicial.MainModule
como implementación inicial del código del wallet. El MainModule
valida el imageHash
(durante la validación de la firma) recomputando la dirección contrafactual del wallet, por lo que no requiere inicialización de almacenamiento.Si alguna vez se cambia el imageHash
, MainModule
reemplazará automáticamente la implementación del código de la wallet por MainModuleUpgradeable
, gestionando la inicialización del almacenamiento.